package com.yugao.fintech.antelope.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yugao.fintech.antelope.system.model.entity.SysTenant;
import com.yugao.fintech.antelope.system.model.rqrs.tenant.*;

import java.util.Collection;
import java.util.List;
import java.util.Set;


public interface SysTenantService extends IService<SysTenant> {
    SysTenant validTenant(Long id);

    /**
     * 查询有效的租户
     * 该方法仅查询有效的租户，如果返回0个就说明所有的租户均无效。
     * @deprecated
     */
    List<SysTenant> listEffectiveTenant(Collection<Long> idList);

    TenantResp getEffectiveTenant(Long id);

    /**
     * 返回某个租户被多少个用户引用了
     */
    long countUserLinkTenant(Long id);

    /**
     * 根据ID删除租户，会判断是否已被引用
     */
    void deleteTenant(Long id);

    void batchDeleteTenant(List<Long> idList);

    /**
     * 查询
     * @param query 查询条件
     * @return 结果
     */
    IPage<TenantResp> pageTenant(TenantPageReq query);

    /**
     * 查询全部
     */
    List<SysTenant> listAll();

    Long saveTenant(TenantSaveReq req);

    boolean updateTenant(TenantUpdateReq req);

    /**
     * 更新租户的角色菜单
     *
     * @param tenantId 租户编号
     * @param menuIds 菜单编号数组
     */
    void updateTenantRoleMenu(Long tenantId, Set<Long> menuIds);

    TenantResp getTenantById(Long id);

    /**
     * @deprecated
     */
    SysTenant getByDomain(String domain);

    /**
     * 获取租户配置
     */
    TenantConfigResp getConfig();

    /**
     * 租户所有者更新租户信息
     */
    void updateOwnerTenant(TenantOwnerUpdateReq req);

    /**
     * 获取用户当前租户, 如果是第一次就选择第一个租户作为默认登录租户
     * @param userId 用户id
     */
    SysTenant getUserCurrentTenant(Long userId);
}
